/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package upeu.edu.pe.dao;

/**
 *
 * @author Administrador
 */
//import com.cticsperu.model.SivPrivilegio;
//import com.cticsperu.model.VistaSivAcceso;
//import com.cticsperu.model.SivTrabajador;
import java.math.BigInteger;
import upeu.edu.pe.modelo.SauPrivilegios;
import upeu.edu.pe.modelo.VistaSauAcceso;
import upeu.edu.pe.modelo.SauUsuario;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.hibernate.criterion.Expression;

@Repository("privilegioDao")
public class SauPrivilegiosDaoImpl implements  SauPrivilegiosDao {
        protected final Log logger = LogFactory.getLog(SauPrivilegiosDaoImpl.class);  	
	@Autowired
        private SessionFactory sessionFactory;
       
        
	/*@SuppressWarnings("unchecked")        
        public List<SivPrivilegio> listaPrivilegio() {		
		return (List<SivPrivilegio>) sessionFactory.getCurrentSession().createCriteria(SivPrivilegio.class).list();
	}      */  

	@SuppressWarnings("unchecked")
	public ArrayList<VistaSauAcceso> listaPrivilegioTrabajador(SauUsuario usuario){
        ArrayList<VistaSauAcceso> resultado=new ArrayList<VistaSauAcceso>();
        List lista=null;
        VistaSauAcceso to=null;
	try {                       
            lista= (List)sessionFactory.getCurrentSession()
                    .createSQLQuery(" select id_acceso,  nombre, pagina, orden,  alias, id_menu, (select m.nombre  "
                    + "from siv_menu m  where m.id_menu=a.id_menu) nombremenu, estado, estadopri "
                    + "from ( select id_acceso, nombre, pagina, id_menu, orden, id_trabajador, alias, (case when state='1' THEN state else '0' end)  estado, (case when id_trabajador is null THEN '0' else '1' end) estadopri "
                    + "from vista_siv_acceso left join ( select id_acceso, id_trabajador, state from  siv_privilegio where id_trabajador=? ) USING(id_acceso)) a "
                    + "order by (select m.alias  from siv_menu m  where m.id_menu=a.id_menu) asc, orden asc ")                    
                   // .setString(0, usuario.getIdUsuario())
                    .list();
             Iterator iterator = lista.iterator();
             while(iterator.hasNext()){
             Object[] tuple = (Object[])iterator.next(); 
                to=new VistaSauAcceso();
               // to.setIdAcceso((BigInteger) tuple[0]);
                to.setNombre((String) tuple[1]);
                to.setUrl((String) tuple[2]);
                to.setNroOrden((BigInteger) tuple[3]);
                to.setDescripcion((String) tuple[4]);
               //to.setIdMenu((BigInteger) tuple[5]);
                to.setEstado((BigInteger) tuple[6]);
             // to.setNombre((String) tuple[6]);
                //to.setEstado((String) tuple[7].toString());
               // to.setEstadopri((String)tuple[8].toString());
                resultado.add(to);
             }            
            }catch (Exception e) { logger.info("Mensage de Error en listaPrivilegioUsuario() "+e.getMessage());   }
            finally{ sessionFactory.close(); }
            return resultado;
	}
        
       /* 
	@SuppressWarnings("unchecked")
	public List<SivPrivilegio> buscarPrivilegio(SivPrivilegio privilegio) {
        List<SivPrivilegio> resultado=null;
        String accesoidP=privilegio.getIdAcceso().getIdAcceso(); String trabajadorP=privilegio.getIdTrabajador().getIdTrabajador();
	try {           
           resultado= (List<SivPrivilegio>) sessionFactory.getCurrentSession().createCriteria(SivPrivilegio.class)
                                                 .add(Expression.eq("idTrabajador.idTrabajador", trabajadorP))
                                                 .add(Expression.eq("idAcceso.idAcceso", accesoidP)).list();            
            }catch (Exception e) { logger.info("Mensage de Error en buscarPrivilegio() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}

	public void savePrivilegio(SivPrivilegio privilegio) {         
	    try { sessionFactory.getCurrentSession().saveOrUpdate(privilegio); }
            catch (Exception e) { logger.info("Mensage de Error en savePrivilegio() "+e.getMessage());   }
            finally{ sessionFactory.close(); }                        
	}

	public void actualizarPrivilegio(SivPrivilegio privilegio) {
	    try {
                String qry="update siv_privilegio set state=? where id_acceso=? and id_trabajador=?  ";
                sessionFactory.getCurrentSession().createSQLQuery(qry)
                        .addEntity(SivPrivilegio.class)
                        .setString(0, privilegio.getState())
                        .setString(1, privilegio.getIdAcceso().getIdAcceso())
                        .setString(2, privilegio.getIdTrabajador().getIdTrabajador())
                        .executeUpdate(); 
               }
            catch (Exception e) { logger.info("Mensage de Error en actualizarPrivilegio() "+e.getMessage());   }
            finally{ sessionFactory.close(); }
	}  */     
	public void actualizarPrivilegioTrabajador(SauPrivilegios privilegio) {
	    try {
                String qry="update sau_privilegio set state=? where id_usuario=?  ";
                sessionFactory.getCurrentSession().createSQLQuery(qry)
                        .addEntity(SauPrivilegios.class)
                        //.setString(0, privilegio.getState())
                        //.setString(1, privilegio.getIdUsuario().getIdUsuario())
                        .executeUpdate(); 
               }
            catch (Exception e) { logger.info("Mensage de Error en actualizarPrivilegioUsuario() "+e.getMessage());   }
            finally{ sessionFactory.close(); }
	}
        
        /*
	public void actualizarPrivilegioGrupo(SivPrivilegio privilegio, String grupoIdacceso) {
	    try {
                String qry="update siv_privilegio set state=? where id_trabajador=? and id_acceso NOT in("+grupoIdacceso+") ";
                sessionFactory.getCurrentSession().createSQLQuery(qry)
                        .addEntity(SivPrivilegio.class)
                        .setString(0, privilegio.getState())
                        .setString(1, privilegio.getIdTrabajador().getIdTrabajador())
                        .executeUpdate(); 
               }
            catch (Exception e) { logger.info("Mensage de Error en actualizarPrivilegioTrabajador() "+e.getMessage());   }
            finally{ sessionFactory.close(); }
	}*/

    public ArrayList<VistaSauAcceso> listaPrivilegioUsuario(SauUsuario usuario) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
        
}
